package cn.tedu.lucky.draw.server.protocol.po;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity(name = "draw_activity")
/**
 * 为了将Activity声明为JPA实体，共JPA进行查询操作，该类上方必须添加@Entity注解
 * name属性是用于指定在查询中使用的实体名称，@Entity 注解中使用 name 属性时，它通常是可选的
 * 如果没有提供 name 属性，则默认使用类名作为实体名称
 */
public class Activity {
    /**
     * 通过GeneratedValue注解，可以用来指定主键生成策略，例如使用数据库自身的序列，自动增长的特性
     * 数据库会在新纪录插入时，自动为ID字段赋予唯一值
     */
    /**
     * @Id 用于指定实体类中的某个字段作为数据库表的主键列
     * 这个注解是 JPA 中的核心概念之一，因为每个实体都必须有一个唯一标识符（即主键）
     * 以便 JPA 提供者能够在数据库中准确追踪和管理每个记录
     *
     * @Id 注解还可以和其他注解一起使用以提供更多的映射信息，例如 @GeneratedValue 注解
     * 该注解可以用来指定主键生成策略，例如使用数据库自身的序列、自动增长特性
     * 这里的策略是 GenerationType.IDENTITY，意味着数据库会在新记录插入时自动为 id 字段赋予唯一值。
     */
    @Id
    /**
     * @GeneratedValue 注解：
     * 1. 该注解可以用来指定主键生成策略，例如使用数据库自身的序列、自动增长特性
     * 2. 这里的策略是 GenerationType.IDENTITY，意味着数据库会在新记录插入时自动为 id 字段赋予唯一值。
     */
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    //活动ID
    private Long id;
    //活动名称
    private String name;
    //活动描述
    private String description;
    //活动图片
    private String img;
    /**
     * @Column: 定义实体类属性到数据库表列的映射
     * 不显式地使用 @Column 注解在实体类的字段上
     * JPA 默认还是能够将实体类的属性映射到数据库表的列上
     */
    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //活动开始时间
    @Column(name="start_time")
    private LocalDateTime starTime;
    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //活动结束时间
    private LocalDateTime endTime;
    //活动状态
    private Integer status;
    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //活动创建时间
    private LocalDateTime createTime;
    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //活动修改时间
    private LocalDateTime updateTime;
    //活动排序
    private Integer sort;

    public Activity() {
    }

    public Activity(Long id, String name, String description, String img, LocalDateTime starTime, LocalDateTime endTime, Integer status, LocalDateTime createTime, LocalDateTime updateTime, Integer sort) {
        this.id = id;
        this.name = name;
        this.description = description;
        this.img = img;
        this.starTime = starTime;
        this.endTime = endTime;
        this.status = status;
        this.createTime = createTime;
        this.updateTime = updateTime;
        this.sort = sort;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public LocalDateTime getStarTime() {
        return starTime;
    }

    public void setStarTime(LocalDateTime starTime) {
        this.starTime = starTime;
    }

    public LocalDateTime getEndTime() {
        return endTime;
    }

    public void setEndTime(LocalDateTime endTime) {
        this.endTime = endTime;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(LocalDateTime update) {
        this.updateTime = update;
    }

    public Integer getSort() {
        return sort;
    }

    public void setSort(Integer sort) {
        this.sort = sort;
    }

    @Override
    public String toString() {
        return "Activity{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                ", img='" + img + '\'' +
                ", starTime=" + starTime +
                ", endTime=" + endTime +
                ", status=" + status +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                ", sort=" + sort +
                '}';
    }
}
